// 学习 ts 类型
// 变量声明： 类型 = 值

import { useState } from "react";

// 布尔
export const bool: boolean = true;

// 数字
export const num1: number = 1234;
export const num2: number = 0.3;
export const num3: number = 1234;

// 字符串类型
export const str1: string = "123";
export const str2: string = "123";
export const str3: string = `123`;

// 数组类型
export const arr1: number[] = [1, 2, 3, 4, 5];
export const arr2: string[] = ["a", "b", "c"];
export const arr3: (number | string)[] = [1, 2, 3, "a", "b"];

// 元组: 长度为2的数组
export const t1: [boolean, number] = [true, 123];
// 举例子
// const [state, setState] = useState(1)

// 枚举
enum Color {
  Red = 10,
  Yellow,
  Blue,
}

// Any: 任意类型
// Any: 这些值进行检查而是直接让它们通过编译阶段的检查
// 不建议使用
let a: any = 1;

a = "123";
a = "1231231";
a = true;

// Void： 空，无，没有
// 特指函数没有函数值的类型
function fn() {
  return 1;
}

export const result = fn();

// Null 和 Undefined
// 1. 值和类型一样
// 2. 是其他所有类型的字类型
export let n: null = null;
export let u: undefined = undefined;

// 需要配置 tsconfig.json配置项 strictNullChecks = false
// 不建议关闭
export let num123: number = undefined;

// Never： 从不， 永不

function fn1(): never {
  while (true) {
    console.log(123);
  }
}

function fn2(): never {
  throw new Error("报错了");
  console.log(1231231);
}

// Object： 对象， 不建议使用
export const o1: Object = { name: "张三" };
export const o2: Object = [1, 2, 3, 4];
export const o3: Object = new String('123');
export const o4: Object = new Number(123);
export const o5: Object = new Boolean(123);
export const o6: Object = function() {}
export const o7: Object = new Date();
export const o8: Object = Math




